package com.example.d5_tcp2;

import java.io.DataOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.net.Socket;
import java.util.Scanner;

/**
 * TCP通信多发多收 客户端
 */
public class Client {
    public static void main(String[] args) throws IOException {
        System.out.println("客户端启动...");
        /**
         * 1.创建Socket对象，并指定服务端的IP地址和端口号
         */
        Socket socket = new Socket("127.0.0.1", 8888);

        /**
         * 2.从socket通信管道中得到一个字节输出流，用来发送数据给服务端程序
         */
        OutputStream outputStream = socket.getOutputStream();

        /**
         * 3.将低级的字节输出流包装成高级的DataOutputStream
         */
        DataOutputStream dataOutputStream = new DataOutputStream(outputStream);

        Scanner scanner = new Scanner(System.in);
        while (true) {
            /**
             * 4.向socket通信管道中写入数据
             */
            System.out.println("输入要发送的数据：");
            String msg = scanner.nextLine();
            if ("exit".equals(msg)) {
                System.out.println("客户端退出...");
                /**
                 * 5.释放资源（流、socket）
                 */
                dataOutputStream.close();
                socket.close();
                break;
            }
            dataOutputStream.writeUTF(msg);
            /**
             * 刷新缓冲区，把数据从缓冲区写入到网络中
             */
            dataOutputStream.flush();
        }

        /**
         * 数据流动方向：dataOutputStream -> outputStream -> socket
         */
    }
}
